package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISalaryTableDAO;
import org.jsola.hr.dto.SalaryTableAddDTO;
import org.jsola.hr.dto.SalaryTableUpdateDTO;
import org.jsola.hr.entity.SalaryTableDO;
import org.jsola.hr.query.SalaryTableExportQuery;
import org.jsola.hr.query.SalaryTableQuery;
import org.jsola.hr.vo.SalaryTableListVO;
import org.jsola.hr.vo.SalaryTableVO;
import org.jsola.user.core.TokenUser;

import java.util.List;
import java.util.Map;


/**
 * 工资表（工资条统计）
 *
 * @author zhr
 */
public interface ISalaryTableService extends IService<ISalaryTableDAO, SalaryTableDO> {

    /**
     * 新增工资表（工资条统计）
     * @param salaryTableAddDTO 新增工资表（工资条统计）DTO
     * @param tokenUser 当前用户
     * @return 工资表（工资条统计）详情信息
     */
    SalaryTableVO save(SalaryTableAddDTO salaryTableAddDTO, TokenUser tokenUser);

    /**
     * 修改工资表（工资条统计）
     * @param salaryTableUpdateDTO 修改工资表（工资条统计）DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(SalaryTableUpdateDTO salaryTableUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除工资表（工资条统计），物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param salaryTableIds 工资表（工资条统计）id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...salaryTableIds);

    /**
     * 根据工资表（工资条统计）id查找
     * @param salaryTableId 工资表（工资条统计）id
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）详情信息
     */
    SalaryTableVO selectById(String salaryTableId, String siteId);

    /**
     * 查询工资表（工资条统计）
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）列表信息
     */
    List<SalaryTableListVO> select(SalaryTableQuery salaryTableQuery, String siteId);

    /**
    * 查询工资表（工资条统计）记录数
    * @param salaryTableQuery 查询条件
    * @param siteId 所属站点id
    * @return 工资表（工资条统计）记录数
    */
    int selectCount(SalaryTableQuery salaryTableQuery, String siteId);

    /**
     * 分页查询工资表（工资条统计）
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）列表信息
     */
    Page<SalaryTableListVO> selectPage(SalaryTableQuery salaryTableQuery, String siteId);


    /**
     * 根据工资表（工资条统计）id查找
     * @param salaryTableId 工资表（工资条统计）id
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）
     */
    SalaryTableDO selectDOById(String salaryTableId, String siteId);

    /**
     * 查询工资表（工资条统计）
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）列表
     */
    List<SalaryTableDO> selectDO(SalaryTableQuery salaryTableQuery, String siteId);

    /**
     * 查询工资表（工资条统计）相关
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）列表信息
     */
    Map<String, List<SalaryTableListVO>> listAllRelation(SalaryTableQuery salaryTableQuery, String siteId);

    /**
     * 查询已导入工资表的年份列表
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 年份集合
     */
    List<String> salaryTableImportedYearList(SalaryTableQuery salaryTableQuery, String siteId);

    /**
     * 查询员工工资表年月分组
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）列表信息
     */
    List<SalaryTableListVO> salaryTableGroupByEmpId(SalaryTableQuery salaryTableQuery, String siteId);

    /**
     * 查询员工工资表年月分组相关
     * @param salaryTableQuery 查询条件
     * @param siteId 所属站点id
     * @return 工资表（工资条统计）列表信息
     */
    List<SalaryTableListVO> salaryTableGroupByMonthEmpId(SalaryTableQuery salaryTableQuery, String siteId);

    /**
     * 工资表导出
     * @param salaryTableExportQuery 查询条件
     * @param siteId 所属站点id
     * @return 表名
     */
    String salaryTableExport(SalaryTableExportQuery salaryTableExportQuery, String siteId);
}


